package org.apache.ibatis.common.annotations;

import org.apache.ibatis.config.mapping.ResultSetType;

import java.lang.annotation.*;

/**
 * @Name Options
 * @Description: [配置] Mybatis 选项
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-05-09 14:57:41
 **/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Options {
    /**
     * 缓存刷新选项：
     * DEFAULT：默认值。对于 SELECT 语句，不刷新缓存；对于 INSERT / UPDATE / DELETE 语句，刷新缓存。
     * TRUE：无论语句类型如何，都会刷新缓存。
     * FALSE：无论语句类型如何，都不会刷新缓存。
     *
     * @author lichao
     * @version v1.0.0
     * @date 2024-05-09 14:58:52
     */
    enum FlushCachePolicy {
        DEFAULT,
        TRUE,
        FALSE
    }

    boolean useCache() default true;

    FlushCachePolicy flushCache() default FlushCachePolicy.DEFAULT;

    ResultSetType resultSetType() default ResultSetType.DEFAULT;

    StatementType statementType() default StatementType.PREPARED;

    int fetchSize() default -1;

    int timeout() default -1;

    boolean useGenerateKeys() default false;

    String keyProperty() default "";

    String keyColumn() default "";

    String resultSets() default "";
}
